11
תגובות

מה הכוונה ב-Multibyte String?

פתח OrelBeY ,
לא הבנתי בשביל מה צריך את הפונקציות של Multibyte String או איך שלא אומרים את זה. למשל, מה ההבדל בין mb_strlen לבין strlen? קראתי את ההקדמה בדוקומנטציה ולא ממש הבנתי.

11 תשובות

avatar ענה intval ב 03 לספטמבר 2012 #

תתרגם מאנגלית את המילים multibyte
ואחרי זה תנסה לקשר את זה עם מה שמספרים לך על מחרוזות וקידודים
רמז: תקרא את המשפט הראשון תחת הכותבת utf-8 הרבה פעמים.

עכשיו PHP (עד 5.4) עבדה עם קידוד פנימי של מחרוזות בתור iso-9961 משהו
ככה שכשהיית כותב $x='hi'; הקידוד של המחרוזת הזאת היה הקידוד הזה. strlen יודעת לחשב אורך של מחרוזת שבה כל תו הוא בייט אחד. אם המחרוזת שלך הייתה בנויה בקידוד אחר (שני בייטים לתו) strlen היית חושבת שיש שם שני תווים (כי היא רגילה לבייט פר תו) והיית מקבל תוצאות לא נכונות.

בשביל זה יש הרחבה mb שיודעת לעבוד עם מחרוזות שתופסות יותר מבייט אחד פר תו.

avatar ענה OrelBeY ב 08 לספטמבר 2012 #

רגע, זה אומר שאני צריך להשתמש בפונקציות של multibyte במקום פונקציות רגילות אם אני משתמש ב-UTF-8?

avatar ענה intval ב 08 לספטמבר 2012 #

נכון מאוד.

avatar ענה OrelBeY ב 08 לספטמבר 2012 #

אוך, לא ראיתי לזה אזכור אפילו בספר מעולה באנגלית ובהמון אתרים. תודה לך. :)

avatar ענה intval ב 08 לספטמבר 2012 #

ספר מיועד לרמות שונות.
להסביר למישהו שמתחיל ללמוד מה זה קידוד, ממה הוא מורכב ולמה multibyte
זה משהו שעדיף להימנע ממנו בתחילת הדרך :)

avatar ענה OrelBeY ב 08 לספטמבר 2012 #

אז אני אשמח נורא אם תמליץ לי על ספר טוב על PHP למתקדמים.
ואני גם ככה קונה עוד שני ספרים (טכנית, זה ליום הולדת P:), אחד PHP למתקדמים והשני OOP למתקדמים. :)

avatar ענה intval ב 08 לספטמבר 2012 #

לא מכיר כאלה.
הספר היחידי שהיה לי ב-PHP היה מספיק נורא בשביל לשים אותו בצד :)

avatar ענה shlomo120 ב 10 לספטמבר 2012 #

לפי דעתי עדיף ללמוד מהאינטרנט כי PHP היא שפה שכל הזמן מתעדכנת . ולכן אחרי חודש חודשיים יכול להיות קטע בספר שהוא לא עדכני ו\או לא יעיל ...

avatar ענה OrelBeY ב 14 לדצמבר 2012 #

שאלה נוספת בנושא:
אם אני רוצה לבדוק אם אורך של מחרזות שווה (או במקרה אחר - גדול מ-) לאפס (למטרת פילטרים) - זה לא משנה אם אני אשתמש ב-mb_strlen() או ב-strlen(), נכון?

avatar ענה intval ב 14 לדצמבר 2012 #

פונקציות הפילטר PHP לא יודעות לבדוק אורך של מחרוזת. לכן את הבדיקה תצטרך לעשות ידנית.
את הבדיקה הידנית אתה תמיד עושה עם mb_* לא משנה מה השורה הבאה בקוד.

avatar ענה PHPDeveloper ב 14 לדצמבר 2012 #

תודה רבה אלכס, למדתי גם משהו